package com.xhwl.data.service.impl;


import com.xhwl.common.pojo.cent.sdata.MenuModule;
import com.xhwl.data.dao.IMenuModuleDao;
import com.xhwl.data.service.IMenuModuleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @Author JCccc
 * @Description
 * @Date 2021/8/10 10:57
 */
@Service
public class MenuModuleServiceImpl implements IMenuModuleService {
    @Autowired
    IMenuModuleDao menuModuleDao;

    @Override
    public Comparator<MenuModule> order() {
        Comparator<MenuModule> comparator = new Comparator<MenuModule>() {
            @Override
            public int compare(MenuModule o1, MenuModule o2) {
                if (!o1.getSortNum().equals(o2.getSortNum())) {
                    return o1.getSortNum() - o2.getSortNum();
                }
                return 0;
            }
        };
        return comparator;
    }

    @Override
    public List<MenuModule> getChild(Integer id, List<MenuModule> allMenu) {
        //子菜单
        List<MenuModule> childList = new ArrayList<MenuModule>();
        for (MenuModule nav : allMenu) {
            // 遍历所有节点，将所有菜单的父id与传过来的根节点的id比较
            //相等说明：为该根节点的子节点。
            if(nav.getParentId().equals(id)){
                childList.add(nav);
            }
        }
        //递归
        for (MenuModule nav : childList) {
            nav.setChildren(getChild(nav.getId(), allMenu));
        }
        //排序
        Collections.sort(childList,order());
        //如果节点下没有子节点，返回一个空List（递归退出）
        if(childList.size() == 0){
            return new ArrayList<MenuModule>();
        }
        return childList;

    }

    @Override
    public List<MenuModule> generateTree() {
        Map<String, Object> data = new HashMap<>();
        try {//查询所有菜单
            List<MenuModule> allMenu = menuModuleDao.getList();
            //根节点
            List<MenuModule> rootMenu = new ArrayList<>();
            for (MenuModule nav : allMenu) {
                //父节点是0的，为根节点。
                if (0==nav.getParentId()) {
                    rootMenu.add(nav);
                }
            }
            /* 根据Menu类的order排序 */
            Collections.sort(rootMenu, order());
            //为根菜单设置子菜单，getChild是递归调用的
            for (MenuModule nav : rootMenu) {
                /* 获取根节点下的所有子节点 使用getChild方法*/
                List<MenuModule> childList = getChild(nav.getId(), allMenu);
                //给根节点设置子节点
                nav.setChildren(childList);
            }
            return rootMenu;
        } catch (Exception e) {
            return new ArrayList();
        }

    }
}
